10 REM "MOUSE DRIVEN MENUS" V1.0 11 REM 12 REM SOURCE FILE BY ANTHONY BRYANT 13 REM 14 REM AUGUST 1986 15 SYS 700 16 .OPT N 18 ; 20 ;*** BASIC ROM ROUTINES *** 22 CHRGET = $0073 ;GET NEW CHAR 24 CHR(null)T = $0079 ;GET OLD CHAR 26 EVALFM = $AD9E ;EVALUATE FORMULA 28 EATCMA = $AEFD ;EAT "," 30 SYNTAX = $AF08 ;SYNTAX ERROR 32 ILLQNT = $B248 ;ILLEGAL QUANTITY 34 FRESTR = $B6A3 ;FREE DESCRIPTOR 36 FACBYT = $B7A1 ;FAC TO BYT IN X 38 GETBYT = $B7F1 ;EAT "," GET BYT IN X 40 ; 42 ;*** MEMORY MAP *** 44 PROGM = $8000 ;START OF PROGRAM 46 ; = $8C00 ;FUTURE EXPANSION 48 MLIST = $8D00 ;MENULIST (252 BYTES) 50 CMEM0 = $8E00 ;COLOR STORE 1/2SCRN 52 BMAP0 = $9000 ;BITMAP STORE 1/2SCRN 54 CMEM1 = $CC00 ;'HIRES' COLOR MEMORY 56 SPTR0 = $CFF8 ;SPRITE 0 POINTER 58 CHSET = $D800 ;LOWERCASE ROM SET 60 BMAP1 = $E000 ;'HIRES' BITMAP 62 ASCII = $EBC2 ;TABLE KEYCODE/ASCII 64 SLOT1 = $FF40 ;SPRITE SLOT (#253) 66 ; 68 ;*** ZERO PAGE REQUIREMENT *** 70 CS = $9B ;CURRENT COLUMN SAVE 72 CE = $9C ;CURRENT COLUMN END 74 CC = $9E ;CURRENT COLUMN 76 RR = $9F ;CURRENT ROW 78 ; $A3 TO $AB - VARIOUS 80 LC = $B0 ;LEFT COLUMN CURRENT MENU 82 TR = $B1 ;TOP ROW " " 84 WD = $B2 ;WIDTH OF " " 86 DP = $B3 ;DEPTH OF " " 88 HS = $B4 ;TEMP SAVE HEADER PARAM 90 HC = $BD ;LEFT COLUMN OF HEADER 92 HR = $BE ;TOP ROW OF HEADER/MENUBAR 94 HW = $BF ;WIDTH OF HEADER 96 HT = $C0 ;HEADERFORM/TEXT$ OR IMAGE$ 98 ; $F7 TO $FA - PNTR TO CMEM & BMAP 100 ; 102 ; 104 *=PROGM ;START OF CODE 106 ; 108 ; 110 ;MENUS COMMAND AND VARIABLES 112 JMP MENUS ;MENUS MANAGER 114 MNUM .BYT 0 ;MENU NUMBER - #MN(1-7) 116 MCOL .BYT 1 ;MENU COLOR BYTE FG/BG 118 MFLG .BYT 0 ;MENUBAR ON/OFF FLAG 120 MITM .BYT 0 ;MENU ITEM - #MI(0-8) 122 MTYP .BYT 0 ; " ITEM TYPE #MT(0-2) 124 MLIX .BYT 0 ;MENU [155] INDEX 126 ;MOUSE COMM[175] [175] VARIABLES 128 JMP MOUSE ;MOUSE MANAGER[173]DRIVER 130 MB .BYT 0 ;BUT[164]N STATUS 132 MCX .BYT 0 ;CELL X[171]CO[176]DS 134 MCY .BYT 0 ;CELL Y[171]CO[176]D 136 MX .BYT 0 ;PIXEL X LO 138 .BYT 0 ;PIXEL X HI 140 MY .BYT 0 ;PIXEL Y 142 MYI .BYT 0 ;PIXEL 199[171]Y 144 ; 146 ; 148 ;[172][172][172] MENU [131] STRUCTURES *** 150 ; 152 ; 154 ; #MN [171][171][171] 0 1 2 3 4 5 6 7 156 M[164]P .BYT 0, 0, 0, 0, 0, 0, 0, 0 158 MNLC .BYT 0, 0, 0, 0, 0, 0, 0, 0 160 MNTR .BYT 0, 1, 1, 1, 1, 1, 1, 1 162 MNWD .BYT 40, 0, 0, 0, 0, 0, 0, 0 164 MNDP .BYT 1, 0, 0, 0, 0, 0, 0, 0 166 M[134] .BYT 00,00,00,00,00,00,00,00 168 MCHK .BYT 00,00,00,00,00,00,00,00 170 ; 172 ; #MI [171][171][171] 1, 2, 3, 4, 5, 6, 7 ,8 174 MROW .BYT 0, 0, 0, 0, 0, 0, 0, 0 176 ; 178 MASK .BYT $80,$40,$20,$10,8,4,2,1 180 ; 182 CSET .W[176]D CHSET 184 CHAR .BYT 0 ;CURRENT CHAR 186 RVSE .BYT 0 ;RVS [145] FLAG 188 [134]F .BYT 0 ;[134] [145] FLAG 190 IMGF .BYT 0 ;IMAGE$[173]TEXT$ FLAG 192 ; 194 ; 196 ;[172][172][172] MENU MANAGER [172][172][172] 198 ; 200 ; 202 ;[158] MENUS,MN, 0,MT,NAME$[,XR] 204 ;[171] WHERE XR[178] 0 [176] OC [129] TEXT$ 206 ; (MI[178]0) XR[178]128 [176] OC [129] IMAGE$[171]1 208 ; XR[178]192 [176] OC [129] IMAGE$[171]2 210 ; 212 ;[158] MENUS,MN,MI,MT,ITEM$[,XR] 214 ;[171] WHERE XR[178] 0 [176] KC [129] TEXT$ 216 ; (MI[179][177]0) XR[178]128 [176] KC [129] IMAGE$[171]1 218 ; XR[178]192 [176] OC [129] IMAGE$[171]2 220 ; 222 ;[158] MENUS,MN,MI,MT [171][171] (CHANGE TYPE) 224 ;[158] MENUS [145] [,BG,FG](SHOW MENUBAR) 226 ;[158] MENUS [OFF] .....(HIDE MENUBAR) 228 ;[158] MENUS [156][,BG,FG] (CLEAR [155]S) 230 ; 232 MENUS [178] [172] ;CHECK [129] [164]KENS 234 JSR CHR[203]T:BEQ MENUOFF 236 CMP #"," :BEQ MENUPAR 238 PHA:JSR MENUCOL:PLA ;OPTN COL[176]S 240 CMP #$9C :BEQ MENU[156] 242 CMP #$91 :BEQ MENU[145] 244 JMP SYNTAX ;ERR[176] 246 MENUPAR [178] [172] ;[161] ,#MN,#MI,#MT 248 JSR [161]BYT:TXA:BEQ ILL 250 CPX #8:BCS ILL:STX MNUM ;#MN(1[171]7) 252 JSR [161]BYT 254 CPX #9:BCS ILL:STX MITM ;#MI(0[171]8) 256 JSR [161]BYT 258 CPX #3:BCS ILL:STX MTYP ;#MT(0[171]2) 260 JSR SETTYPE ;IN MENU [131] AREA 262 JSR CHR[203]T:BNE [172][170]3:RTS 264 ;[161] NAME$ [176] ITEM$ [181]O MENU[155] 266 JSR EATCMA ;EAT "," 268 JSR E[197]FM ;E[197] STRING 270 JSR [184]STR ;[161] DESCRIP[164]R 272 JSR SET[155] ;[181]O MENU[155] 274 JSR CHR[203]T:BNE [172][170]3:RTS 276 ;[161] XR [[176] OC] [[176] KC] CODED BYTE 278 JSR [161]BYT:TXA 280 JMP SETLAST ;[181]O MENU[155] 282 ; 284 ILL JMP ILLQNT ;ILLEGAL QUANTITY 286 ; 288 MENU[156] [178] [172] ;CLEAR ALL MENU [155]S 290 LDX #0:TXA:STA M[164]P,X 292 INX:CPX #8:BCC [172][171]6:STA MLIX 294 TAX:STA M[155],X 296 INX:BNE [172][171]4 ;[175] DO A MENUOFF 298 MENUOFF [178] [172] ;HIDE MENUBAR 300 LDA MFLG:BEQ MENUST 302 JSR MNULL:STY MITM 304 JSR CLOSWNDW ;[160] WINDOW 306 LDA #0:BEQ MENUST 308 MENU[145] [178] [172] ;SHOW MENUBAR 310 LDA MFLG:BNE MENUST ;AL[135]Y [145]! 312 JSR [162]BP ;RESET BPTR 314 LDA M[164]P:BEQ MENUST ;NO MENUS! 316 JSR MENUSIZ ;SIZE MENUBAR 318 JSR [159]WNDW ;[159] WINDOW 320 JSR MENUBAR ;DISPLAY HEADERS 322 LDA #[171]1 ;FLAG [171] [145] 324 MENUST STA MFLG:RTS 326 ; 328 MENUCOL [178] [172] ;EAT [164]KEN [,BG,FG] 330 JSR CHR[161]:BNE [172][170]3:RTS 332 JSR [161]BYT:TXA:[175] #$0F:STA MCOL 334 JSR [161]BYT:TXA:ASL:ASL:ASL:ASL 336 [176]A MCOL:STA MCOL:RTS 338 ; 340 ;MENU TYPES 1 BIT[178]1 ITEM 342 ;[131] STRUCT 1 BYT=1 MENU (8 ITEMS) 344 ; 346 SETTYPE [178] [172] ;SET MENU TYPE 348 LDY MNUM ;#MN(1[171]7) CURRENT MENU 350 LDX MITM ;#MI(0[171]8) CURRENT ITEM 352 BNE [172][170]7 ;[139] #MI[178]0 [167] USE 354 LDY #0:LDX MNUM ; #MN[178]0 BITS 356 [156]M[134] [178] [172] ;TYPE IS [168] DISABLED 358 LDA MASK[171]1,X:E[176] #$FF 360 [175] M[134],Y ;CLEAR BIT #MI 362 STA M[134],Y 364 [156]MCHK [178] [172] ;TYPE IS [168] MARKED 366 LDA MASK[171]1,X:E[176] #$FF 368 [175] MCHK,Y ;CLEAR BIT #MI 370 STA MCHK,Y 372 LDA MTYP ;#MT(0[171]2) CURRENT TYPE 374 CMP #0:BEQ SETM[134] 376 CMP #2:BEQ SETMCHK 378 RTS ;ELSE #MT[178]1 380 ; 382 SETM[134] [178] [172] ;TYPE IS DISABLED 384 LDA M[134],Y ;[134] BITS 386 [176]A MASK[171]1,X ;SET BIT #MI 388 STA M[134],Y:RTS 390 ; 392 SETMCHK [178] [172] ;TYPE IS MARKED 394 LDA MCHK,Y ;CHECK BITS 396 [176]A MASK[171]1,X ;SET BIT #MI 398 STA MCHK,Y:RTS 400 ; 402 [161]TYPE [178] [172] ;CHECK MENU TYPES 404 LDY MNUM ;#MN(1[171]7) CURRENT MENU 406 LDX MITM ;#MI(0[171]8) CURRENT ITEM 408 BNE [161]M[134] 410 LDY #0:LDX MNUM ;[139] #MI[178]0 412 [161]M[134] [178] [172] ;CHECK [139] DISABLED 414 LDA M[134],Y ;ITEM FLAGS 416 [175] MASK[171]1,X 418 STA [134]F ;0[178]OFF 420 [161]MCHK [178] [172] ;CHECK [139] MARKED 422 LDA MCHK,Y ;ITEM FLAGS 424 [175] MASK[171]1,X 426 RTS ;0[178]OFF 428 ; 430 SETROW [178] [172] ;SET MENU ROW PER ITEM 432 LDX MITM:STA MROW[171]1,X:RTS 434 [161]ROW [178] [172] ;[161] MENU ROW PER ITEM 436 LDX MITM:LDY MROW[171]1,X:RTS 438 ; 440 ; 442 ;MENU[155] [171] A TABLE OF PO[181]ERS 444 ;[164] TEXT$ [176] IMAGE$ DESCRIP[164]RS 446 ; 4 BYTES PER NAME$ [176] ITEM$ 448 ; INDEX [171] MLIX[178](MN[171]1)[172]36[170]MI[172]4 450 ; 452 MLX [178] [172] ;[161] INDEX [181]O MENU[155] 454 LDA MNUM:SEC:SBC #1 ;(MN[171]1) 456 ASL:ASL:STA $A3 ;[172]4 458 ASL:ADC $A3:STA $A3 ;[172]12 460 ASL:ADC $A3:STA $A3 ;[172]36 462 LDA MITM:ASL:ASL ;[172]4 464 ADC $A3:TAY:RTS 466 ; 468 SET[155] [178] [172] ;DESCRIP[164]R IN $22[173]23 470 TAX ;[195]GTH OF STRING 472 JSR MLX:TXA:STA M[155],Y ;ML[171]X 474 INY:LDA $22:STA M[155],Y ;ML[171]L 476 INY:LDA $23:STA M[155],Y ;ML[171]H 478 INY:STY MLIX ;UPDATE INDEX 480 LDA #0:JSR SETLAST ;[150]AULT 482 SETM[164]P [178] [172] ;UPDATE MAXIMUMS MENUS 484 LDX MNUM:CPX M[164]P:BCC [172][170]5 486 STX M[164]P ;UPDATE MAXIMUM #MN 488 LDA MITM:CMP M[164]P,X:BCC [172][170]5 490 STA M[164]P,X ;UPDATE MAXIMUM #MI 492 RTS 494 ; 496 SETLAST [178] [172] ;ADD XR [164] MENU[155] 498 LDY MLIX:STA M[155],Y:RTS ;ML[171]XR 500 ; 502 [161][155] [178] [172] ;DESCRIP[164]R [164] $A3[173]A4 504 JSR MLX:LDX M[155],Y ;ML[171]X 506 INY:LDA M[155],Y:STA $A3 ;ML[171]L 508 INY:LDA M[155],Y:STA $A4 ;ML[171]H 510 INY:LDA M[155],Y:STA $A5 ;ML[171]XR 512 STY MLIX ;[148] .Y INDEX 514 TXA:BIT $A5 ;STRING [195]GTH IN .X 516 [161][195] [178] [172] ; CELL [195]GTH IN .X 518 BPL [172][170]8 ;[139] TEXT$ 520 BVC [172][170]3:LSR ;[139] IMAGE$[171]1 522 LSR:LSR:LSR ;[173]8 [176] [173]16 524 TAX:LDA $A5:BIT $A5:RTS 526 ; 528 ; 530 ;[172][172][172] MENU ROUTINES [172][172][172] 532 ; 534 ; 536 MENUSIZ [178] [172] ;SIZE PRO[185]ED MENUBAR 538 LDA #1:STA MNDP ;1 ROW 540 LDY #0:STY MITM:INY 542 MSIZ2 STY MNUM 544 CPY M[164]P:BEQ [172][170]4:BCS MNULL 546 JSR [161][155]:BVS MSIZ3 ;CHECK [129]M 548 LDY MNUM:INY:BNE MSIZ2 550 MSIZ3 LDA #2:STA MNDP ;2 ROWS 552 MNULL LDY #0:STY MNUM:RTS 554 ; 556 MENUBAR [178] [172] ;DISPLAY MENU BAR 558 LDX MNLC:STX HC 560 LDY MNTR:STY HR:JSR SCRSR 562 LDY #0:STY MITM:INY 564 MBAR2 STY MNUM 566 CPY M[164]P:BEQ [172][170]4:BCS MNULL 568 LDA M[164]P,Y:BNE [172][170]8 570 STA MTYP:JSR SETTYPE ;NO ITEMS! 572 JSR LCASE ;LOWERCASE [150]AULT 574 JSR [161]TYPE ;SET [134]F [145]LY 576 JSR [161][155] ;MENU[155] PARAMS 578 [175] #$3F:BEQ MBAR3 ;[161] OFFSET OC 580 CLC:ADC HC:TAX ;[185]ITI[145] [164] OC 582 LDY HR:JSR SCRSR ;SET CURS[176] 584 MBAR3 JSR [161][155] ;MENU[155] PARAMS 586 [176]A CC:JSR SETLAST ;SET OC IN XR 588 BIT $A5 ;CHECK [129]M 590 JSR PLT[129]M ;TEXT$ [176] IMAGE$ 592 MBAR4 LDY MNUM:INY:BNE MBAR2 594 ; 596 MENUSEL [178] [172] ;SELECT FROM MENUBAR 598 LDA MFLG:BEQ MSEL4 ;NO MENUBAR! 600 LDA M[164]P:BEQ MSEL4 ;NO MENUS! 602 LDY MNTR:STY HR ;SET HEADER ROW 604 JSR MCMXY ;MOUSE [185]N (MCX,MCY) 606 INY:LDA MNDP ;WITHIN MENUBAR"? 608 DEY:CPY HR:BEQ *+7 ;YES! 610 LSR:BCC *-6:BCS MSEL4 ;NO, EXIT 612 LDY #0:STY MITM:INY 614 MSEL2 STY MNUM ;SCAN EACH MENU NAME 616 CPY MTOP:BEQ *+4:BCS MSEL4 618 JSR GETLIST:STA HT ;FORM STATE 620 AND #$3F:STA HC ;CC OFFSET 622 CMP MCX:BEQ *+4:BCS MSEL4 624 TXA:CLC:ADC HC ;WITHIN HEADER"? 626 CMP MCX:BEQ [172][170]4:BCS MSEL3 ;FOUND! 628 LDY MNUM:INY:BNE MSEL2 ;[130] MENU 630 MSEL3 STX HS ;[148] HEADER WIDTH 632 JSR [161]TYPE:LDA [134]F:BNE MSEL4 634 LDA HS ;[195]GTH IN .A [129] HILITE 636 LDX HC:LDY HR:BIT HT ;[129]M STATE 638 JSR HLIT[129]M ;HLIT TEXT$ [176] IMAGE$ 640 CLC:RTS ;[142] WITH #MN HILITED 642 MSEL4 JSR MNULL ;#MN[178]0 644 SEC:RTS ;[139] C[178]1 NO SELECT! 646 ; 648 MENUBOX [178] [172] ;SIZE UP MENU BOX 650 LDA HR:CLC:ADC MNDP:STA TR ;[164]PROW 652 LDA HC ;TRY [164] ALIGN AT LEFT EDGE 654 MBOX2 STA LC:LDY #0 656 STY WD:STY DP:STY $A6 ;PAST OC 658 LDX #1:STX MITM 660 MBOX3 JSR [161][155]:BVS MBOX4 662 [175] #$3F:BEQ [172][170]4:INX:INX 664 LDY #0:STY $A6:BEQ MBOX5 ;[139] 1 ROW 666 MBOX4 [175] #$3F:CMP $A6 ;[139] 2 ROWS 668 BEQ [172][170]4:BCS [172][170]6:LDY #0:STY $A6 670 LDY $A6:STA $A6 ;UPDATE PAST OC 672 TXA:SEC:ADC $A6:TAX ;SIZE WIDTH 674 CPY #0:BNE [172][170]6:INC DP ;SIZE DEPTH 676 MBOX5 INC DP ;SIZE DEPTH 678 CPX WD:BCC [172][170]4:STX WD ;SIZE WIDTH 680 MBOX6 INC MITM:LDY MNUM 682 LDA MITM:CMP M[164]P,Y 684 BCC MBOX3:BEQ MBOX3 ;[130] ITEM 686 LDA LC:CLC:ADC WD ;CHECK MAX WIDTH 688 CMP #39:BCC MBOX7:BEQ MBOX7 690 SBC #39:E[176] #[171]1:ADC HC ;ADJUST 692 JMP MBOX2 ;TRY LC[178]HC[171](LC[170]WD[171]39) 694 MBOX7 LDA LC:STA MNLC,Y 696 LDA WD:STA MNWD,Y ;S[164]RE THE 698 LDA TR:STA MNTR,Y ;VIEWP[176]T PARAMS 700 LDA DP:CMP #21:BCC [172][170]4 702 LDA #21:STA MNDP,Y:RTS 704 ; 706 MENUDOWN [178] [172] ;FIND MENU & DISPLAY 708 JSR MENUBOX ;SIZE MENU BOX 710 JSR [159]WNDW ;[159] WINDOW 712 JSR VB[176]DER ;B[176]DER VIEWP[176]T 714 MENUPLT [178] [172] ;PLOT MENU 716 LDY TR:STY RR ;[164]P ROW IS START 718 LDX #1:STX MITM:LDY #0:STY $A6 720 MPLT2 JSR LCASE ;LOWERCASE [150]AULT 722 JSR [161][155]:BVC MPLT3;[168] IMAGE$[171]2 724 [175] #$3F:CMP $A6 ;PAST OC 726 BEQ [172][170]4:BCS [172][170]6:LDY #0:STY $A6 728 LDY $A6:STA $A6 ;UPDATE PAST OC 730 CLC:ADC LC:TAX ;ADD OFFSET COLUMN 732 CPY #0:BEQ MPLT3B 734 LDY RR:DEY:DEY:JMP MPLT3C 736 MPLT3 LDX LC ;SET COLUMN 738 MPLT3B LDY RR ;SET ROW 740 MPLT3C JSR SCRSR ;SET CURS[176] 742 LDA RR:JSR SETROW ;PER ITEM 744 JSR [161]TYPE:BEQ [172][170]5 ;SET [134]F 746 JSR PLTMARK ;CHECKMARK [139] SET 748 JSR [161][155] ;MENU[155] PARAMS 750 JSR PLT[129]M ;TEXT$ [176] IMAGE$ 752 BIT $A5:BVS MPLT5 ;[139] IMAGE$[171]2 754 MPLT4 LDY #0:STY $A6 ;RESET PAST OC 756 LDA $A5:[175] #$3F:BEQ MPLT6 758 TAX:LDA [198]II,X ;ALT KEY SEQUENCE 760 JSR PLTALTK ;PLOT [188]O & KEY 762 JMP MPLT6 764 MPLT5 JSR CCRSR ;(2 ROWS) 766 MPLT6 JSR CCRSR ;(1 ROW) 768 INC MITM:LDY MNUM 770 LDA MITM:CMP M[164]P,Y 772 BCC MPLT2:BEQ MPLT2:RTS 774 ; 776 MENUKEY [178] [172] ;SCAN MENU[155] [129] KEY 778 LDA $C5:CMP #64:BNE [172][170]3:RTS 780 LDY #1 ;START SCAN AT MENU #1 782 MKEY2 STY MNUM 784 CPY M[164]P:BEQ [172][170]4:BCS MKEY7 ;EXIT 786 LDA M[164]P,Y:BEQ MKEY5 ;[130] MENU 788 LDX #0:STX MITM 790 JSR [161]TYPE:LDA [134]F:BNE MKEY5 792 MKEY3 JSR [161][155]:BVS MKEY4 794 LDX MITM:BEQ MKEY4 ;[130] ITEM 796 [175] #$3F:CMP $C5:BEQ MKEY6 ;FOUND! 798 MKEY4 INC MITM:LDY MNUM 800 LDA MITM:CMP M[164]P,Y 802 BCC MKEY3:BEQ MKEY3 804 MKEY5 LDY MNUM:INY:BNE MKEY2 806 MKEY6 DEC $C6 ;DE[136]E FROM BUFFER 808 JSR [161]TYPE ;ITEM [134]MED"? 810 LDA DIMF:BNE MKEY7 ;YES, EXIT 812 RTS ;EXIT WITH #MN & #MI 814 MKEY7 JSR MNULL ;NOT FOUND 816 STY MITM:RTS ;OR ITEM DIMMED 818 ; 820 MENUAWAY = * ;REMOVE MENU & HEADER 822 JSR CLOSWNDW ;CLOSE WINDOW 824 LDA HS:LDX HC:LDY HR:BIT HT ;FORM 826 HLITFORM = * ;CHOOSE FORM & HILITE 828 BPL HLITTEXT ;BY EXCHANGING 830 BVC HLITIMG1 ;COLOR NIBBLES 832 BVS HLITIMG2 ;OVER LENGTH - HW 834 ;CELL LENGTH IN .A 836 HLITIMG1 = * 838 HLITTEXT STA HW ;HILITE 1 ROW 840 HLITWORD JSR VCPOSN 842 HLITWOR2 LDY #0 844 HLITWOR3 LDA ($F7),Y 846 ASL:ASL:ASL:ASL:STA $AF 848 LDA ($F7),Y:LSR:LSR:LSR:LSR 850 ORA $AF:STA ($F7),Y 852 INY:CPY HW:BCC HLITWOR3:RTS 854 ; 856 HLITIMG2 STA HW ;HILITE 2 ROWS 858 HLITAREA JSR VCPOSN ;AREA X2 860 LDX #0:JSR HLITWOR2 862 JSR ADLNF7:INX:CPX #2:BCC *-9:RTS 864 ; 866 MENUCTRL = * ;ITEM SELECTION 868 JSR RMPOS0Y ;SPRITE0 AT TOP ROW 870 LDY TR:STY RR ;TOP ROW 872 LDA #1:STA MITM ;1ST ITEM 874 MCTR2 LDX WD:STX HW ;SET WIDTH 876 LDX LC:STX CC ;SET COLUMN 878 JSR GETROW:STY RR ;SET ROW 880 JSR GETLIST:BVC MCTR3:STX HW 882 AND #$3F:CLC:ADC LC:STA CC ;SET CC 884 MCTR3 JSR CHECKBOX:BCS MCTR6B 886 JSR RMBTNS:BEQ MEXIT ;IF RELEASED 888 BIT $A5:BVC MCTR4 ;IF NOT IMAGE$-2 890 CPY RR:BEQ *+11:BCC MCTR9 892 DEY:CPY RR:BEQ *+4:BCS MCTR9 894 CPX CC:BCC MCTR9:TXA 896 SBC CC:CMP HW:BCS MCTR9:BCC MCTR5 898 MCTR4 CPY RR:BNE MCTR9 900 MCTR5 JSR HIGHLITE ;MENU ITEM 902 MCTR6 JSR CHECKBOX ;MOUSE IN BOX"? 904 MCTR6B BCS MEXIT ;EXIT [139] OUTSIDE 906 JSR RMBTNS:BEQ FLASH ;[139] RELEASED 908 BIT $A5:BVC MCTR7 ;[139] [168] IMAGE$[171]2 910 CPY RR:BEQ [172][170]11:BCC MCTR8 912 DEY:CPY RR:BEQ [172][170]4:BCS MCTR8 914 CPX CC:BCC MCTR8:TXA 916 SBC CC:CMP HW:BCS MCTR8:BCC MCTR6 918 MCTR7 CPY RR:BEQ MCTR6 920 MCTR8 PHP:JSR HIGHLITE:PLP;OLD ITEM 922 MCTR9 BCS [172][170]10 ;[164] [130] ITEM 924 DEC MITM ;PREVIOUS ITEM 926 LDA MITM:BNE [172][170]5 928 INC MITM:JMP MCTR2 ;[130] ITEM 930 ; 932 MEXIT LDX #0:STX MITM:STX MB:RTS 934 ; 936 FLASH [178] [172] ;[139] ITEM SELECTED 938 JSR [161]TYPE:LDA [134]F:BNE MEXIT 940 FLASH8 JSR FLASH4 942 FLASH4 JSR FLASH2 944 FLASH2 JSR FLASH1 946 FLASH1 [178] [172] ;DELAYED HIGHLITE 948 LDY #48:JSR DELAY ;48 MILLISEC 950 HIGHLITE [178] [172] ;([176] UNHIGHLITE) 952 JSR [161]TYPE:LDA [134]F:BEQ [172][170]3:RTS 954 LDA HW:LDX CC:LDY RR:BIT $A5 956 JMP HLIT[129]M ;HLIT TEXT$ [176] IMAGE$ 958 ; 960 DELAY [178] [172] ;.Y [178] MILLISEC DELAY 962 LDX #$B8:DEX:BNE [172][171]1 964 DEY:BNE [172][171]6:RTS 966 ; 968 CHECKBOX [178] [172] ;CHECK MOUSE CO[176]DS 970 LDY #16:JSR DELAY ;16 MILLISEC 972 JSR RDMOUSE ;MOUSE CO[176]DS 974 JSR MCMXY ;COLM & ROW CO[176]DS 976 CPX LC:BCC LIMIT:TXA ;OUTSIDE BOX 978 SBC LC:CMP WD:BCS LIMIT 980 CPY TR:BCC LIMIT:TYA 982 SBC TR:CMP DP:BCS LIMIT 984 CLC:RTS ; OK! WITHIN MENUBOX 986 LIMIT SEC:RTS ;OUTSIDE MENUBOX 988 ; 990 ; 992 ; 994 ;[172][172][172] WINDOW ROUTINES [172][172][172] 996 ; 998 ; 1000 [159]WNDW [178] [172] ;[159] WINDOW 1002 JSR VIEWP[176]T ;[150]INE VIEWP[176]T 1004 JSR VWIPE ;CLEAR BITMAP BMAP0 1006 JSR VCOCMEM ;COL[176] CMEM0 AREA 1008 JSR SAVBP ;[148] BUFFER PNTR 1010 JSR VSWCMEM ;SWAP COL[176] MEM[176]Y 1012 JSR VXFER ;SWAP BITMAP OUT 1014 JMP SETBP ;ADVANCE BUFFER PNTR 1016 ; 1018 CLOSWNDW [178] [172] ;[160] WINDOW 1020 JSR VIEWP[176]T ;[150]INE VIEWP[176]T 1022 JSR LODBP ;PUT BACK BPTR 1024 JSR VXFER ;SWAP BITMAP BMAP0 1026 JMP VSWCMEM ;SWAP CMEM0 CMEM 1028 ; 1030 ;WINDOW [148] AREA BUFFER 1032 ;PO[181]ER "BPTR" PO[181]S [164] 1034 ;BITMAP [148] AREA [171] BMAP0 1036 BPTR .W[176]D 0 1038 BPLO .BYTE 00,00 1040 BPHI .BYTE 00,00 1042 ; 1044 [161]BP [178] [172] ;[161] "BPTR" 1046 LDA BPTR:LDX BPTR[170]1 1048 STA $A7:STX $A8:RTS 1050 SAVBP JSR [161]BP ;[148] "BPTR" 1052 LDY MNUM:BEQ [172][170]4:LDY #1 1054 STA BPLO,Y:TXA:STA BPHI,Y:RTS 1056 LODBP [178] [172] ;[147] [148]D "BPTR" 1058 LDY MNUM:BEQ [172][170]4:LDY #1 1060 LDA BPLO,Y:LDX BPHI,Y:BNE PUTBP 1062 SETBP [178] [172] ;SET "BPTR" 1064 LDA $A7:LDX $A8:BNE PUTBP 1066 [162]BP [178] [172] ;INIT "BPTR" 1068 LDA #[179]BMAP0:LDX #[177]BMAP0 1070 PUTBP STA BPTR:STX BPTR[170]1:RTS 1072 ; 1074 [161]CBP [178] [172] ;COMPUTE "CMEM BPTR" 1076 LDA BPTR[170]1:SEC:SBC #[177]BMAP0 1078 STA $FA:LDA BPTR:LSR $FA:R[176] ;[173]8 1080 LSR $FA:R[176]:LSR $FA:R[176]:STA $F9 1082 CLC:LDA $FA:ADC #[177]CMEM0:STA $FA 1084 RTS 1086 ; 1088 ; 1090 ;[172][172][172] VIEWP[176]T ROUTINES [172][172][172] 1092 ; 1094 ;BYTE[171]ALIGNED VIEWP[176]TS 1096 VPX .W[176]D 0 ;PIXEL BYTE ADDRESS 1098 ; 1100 VIEWP[176]T [178] [172] ;VIEWP[176]T PARAMS 1102 LDY MNUM ;MENU NUMBER 1104 LDA MNLC,Y :STA LC ;LEFT C[176]NER 1106 LDA MNTR,Y :STA TR ;[164]P ROW 1108 LDA MNWD,Y :STA WD ;WIDTH 1110 LDA MNDP,Y :STA DP ;DEPTH 1112 ;SET UP CO[176]DINATE PIXEL ADDRESS 1114 CLC:LDA LC:ADC WD:STA CE ;COL [128] 1116 JSR HCRSR:LDX $F9 ;HOME CURS[176] 1118 STX VPX:STA VPX[170]1:RTS 1120 ; 1122 VADDR [178] [172] ;[164]P LEFT C[176]NER BYTE 1124 LDA VPX:LDX VPX[170]1 1126 STA $A7:STX $A8 1128 VRAM [178] [172] ;DISABLE [181]ERRUPTS & ROM 1130 PHA:LDA #$7F:STA $DC0D 1132 LDA #$34:STA $01:PLA:RTS 1134 ; 1136 ;[185]I[164]N COL[176] MEM PO[181]ERS 1138 ; F7[173]F8 PNTR [164] CMEM1 AREA 1140 VCHOME LDX LC:LDY TR ;HOME 1142 VC[185]N LDA #0 ;SET [185]ITI[145] 1144 STA $F7:STA $F8:TYA:BEQ [172][170]8 1146 JSR ADLNF7:DEY:BNE [172][171]4 1148 TXA:CLC:ADC $F7:STA $F7:TAX 1150 LDA #0:ADC $F8:PHA 1152 ADC #[177]CMEM1:STA $F8:PLA:RTS 1154 ; 1156 ADLNF7 CLC ;ADVANCE [145]E CMEM LINE 1158 LDA $F7:ADC #40:STA $F7 1160 BCC [172][170]4:INC $F8:RTS 1162 ; 1164 ;CMEM0 AREA [129] COLR MEM [148]S 1166 ; F9[173]FA PNTR [164] CMEM0 AREA 1168 VCOCMEM LDA MCOL:.BYT $2C 1170 VSWCMEM LDA #0:STA $A3:JSR VRAM 1172 JSR VCHOME:JSR [161]CBP:LDX #0 1174 LDY #0:LDA $A3:BNE [172][170]10 1176 LDA ($F7),Y:PHA:LDA ($F9),Y 1178 STA ($F7),Y:PLA:STA ($F9),Y 1180 INY:CPY WD:BCC [172][171]17 1182 TYA:CLC:ADC $F9:STA $F9 1184 BCC [172][170]4:INC $FA:JSR ADLNF7 1186 INX:CPX DP:BCC [172][171]37:JMP VROM 1188 ; 1190 ADLNA7 CLC ;ADVANCE [145]E BMAP LINE 1192 LDA $AB:ADC #[179]320:STA $A7 1194 LDA $AC:ADC #[177]320:STA $A8 1196 ADLNA9 CLC ;ADVANCE [145]E BMAP LINE 1198 LDA $AD:ADC #[179]320:STA $A9 1200 LDA $AE:ADC #[177]320:STA $AA:RTS 1202 ; 1204 VWIPE [178] [172] ;CLEAR HIRES BUFFER AREA 1206 LDA #0:.BYT $2C 1208 VXFER [178] [172] ;XFER VIEWP[176]T BITMAP 1210 LDA #1:STA $A4 ;XFER FLAG 1212 JSR VADDR:STA $A9:STX $AA 1214 JSR [161]BP:LDY #0 1216 JSR VROW:JSR ADLNA9 1218 LDY $AF:INY:CPY DP:BCC [172][171]11 1220 VROM [178] [172] ;ENABLE [181]ERRUPTS & ROM 1222 LDA #$37:STA $01 1224 LDA #$81:STA $DC0D:RTS 1226 ; 1228 ;SUBROUTINE [129] VWIPE[173]VXFER 1230 VROW STY $AF:LDX #0 ;DO [145]E ROW 1232 LDA $A7:STA $AB:LDA $A8:STA $AC 1234 LDA $A9:STA $AD:LDA $AA:STA $AE 1236 VRO2 LDY #0 1238 VRO3 LDA $A4 ;FLAG[178]0 [129] VWIPE 1240 BEQ VRO4 ;FLAG[178]1 [129] VXFER 1242 LDA ($A9),Y:PHA 1244 LDA ($A7),Y:STA ($A9),Y:PLA 1246 VRO4 STA ($A7),Y 1248 INY:CPY #8:BNE VRO3 1250 TYA:CLC:ADC $A7:STA $A7 1252 BCC [172][170]4:INC $A8 1254 TYA:CLC:ADC $A9:STA $A9 1256 BCC [172][170]4:INC $AA 1258 INX:CPX WD:BCC VRO2:RTS 1260 ; 1262 VB[176]DER [178] [172] ;B[176]DER VIEWP[176]T 1264 JSR VADDR:LDX #0 1266 VBLFT LDA #%10000000:LDY #7 1268 STA ($A7),Y:DEY:BPL [172][171]3 1270 INX:CPX DP:BCS VBBOT 1272 LDA $A7:ADC #[179]320:STA $A7 1274 LDA $A8:ADC #[177]320:STA $A8 1276 BNE VBLFT 1278 VBBOT LDX #0:LDY #7 1280 JSR VBLIN ;BOT[164]M LINE 1282 VBRHT LDX #0:DEY 1284 LDA #%00000001 1286 STA ($A7),Y:DEY:BPL [172][171]3 1288 INX:CPX DP:BCS VB[128]:SEC 1290 LDA $A7:SBC #[179]320:STA $A7 1292 LDA $A8:SBC #[177]320:STA $A8 1294 LDY #7:BNE VBRHT[170]3 1296 VB[128] JMP VROM 1298 ; 1300 VB[164]P [178] [172] ;[164]P LINE OF VIEWP[176]T 1302 JSR VADDR:LDX #0:LDY #0 1304 VBLIN LDA #%11111111 1306 STA ($A7),Y:INX:CPX WD:BCS [172][170]14 1308 LDA $A7:ADC #8:STA $A7 1310 BCC [172][170]4:INC $A8:BNE VBLIN 1312 RTS 1314 ; 1316 ; 1318 ;[172][172][172] PLOTTING ROUTINES [172][172][172] 1320 ; 1322 ;3 [129]MS OF OBJECTS 1324 PLT[129]M [178] [172] ;CHOOSE [129]M & PLOT 1326 BPL PLTTEXT ;WITH AU[164][171]ADVANCE 1328 BVC PLTIMG1 ;OF CURS[176] PNTRS 1330 BVS PLTIMG2 ;[175] BITMAP PNTRS 1332 ;CELL [195]GTH IN .X 1334 PLTTEXT [178] [172] ;DO TEXT$ 1336 INX:LDY #0:STY IMGF ;SET FLAG 1338 DEX:BEQ [172][170]10 1340 LDA ($A3),Y:JSR DOCHAR 1342 INY:BNE [172][171]9:RTS 1344 ; 1346 PLTIMG1 [178] [172] ;DO IMAGE$[171]1 ( 1 ROW) 1348 INX ;CELL [195]GTH IN .X 1350 PLTIMGA LDY #$80:STY IMGF 1352 LDA $A3:LDY $A4 ;L[173]H DESC 1354 STA $A9:STY $AA ;PUT PNTR 1356 PLTIMGB DEX:BNE [172][170]3:RTS 1358 JSR DOCHAR 1360 CLC:LDA $A9:ADC #8:STA $A9 1362 BCC [172][170]4:INC $AA:JMP PLTIMGB 1364 ; 1366 PLTIMG2 [178] [172] ;DO IMAGE$[171]2 (2 ROWS) 1368 LDA CC:STA CS ;[148] CURRENT COLM 1370 TXA:PHA ;CELL [195]GTH IN .X 1372 INX:JSR PLTIMGA ;DO 1ST ROW 1374 LDX CC:LDY RR:LDA CS 1376 STX CS:TAX:INY:JSR SCRSR 1378 PLA:TAX:INX:JSR PLTIMGB ; 2ND ROW 1380 LDX CS:LDY RR:DEY:JMP SCRSR 1382 ; 1384 PLTMARK [178] [172] ;DO CHECKMARK "SQR" 1386 BIT $A5:BVS [172][170]8 ;[139] IMAGE$[171]2 1388 JSR PUTCHK:JMP LCRSR 1390 JSR LCRSR :JMP PUTCHK 1392 ; 1394 PLTALTK [178] [172] ;DO [188]O & ALT KEY 1396 STA CHAR:JSR ECRSR ;EDGE RIGHT 1398 JSR PUTCOM ;COM[171][188]O 1400 JSR LCASE:LDY #0:STY IMGF 1402 LDA CHAR ;DO KEY 1404 DOCHAR [178] [172] ;PLOT A CELL 1406 STA CHAR:TXA:PHA:TYA:PHA 1408 JSR EXCHAR 1410 PLA:TAY:PLA:TAX:RTS 1412 ; 1414 EXCHAR [178] [172] ;TEXT$ [176] IMAGE$ 1416 LDA IMGF:BNE [153] ;[139] IMAGE$ 1418 LDA CHAR:BMI HICHR ;FILTER TEXT$ 1420 LOCHR CMP #$20:BCC LOCH2:CMP #$60 1422 BCC [172][170]6:[175] #$DF:BNE [172][170]4:[175] #$3F 1424 PRCHR LDX RVSE:BEQ [172][170]4:[176]A #$80 1426 LDX #0:STX $AA ;[161] CHSET OFFSET 1428 ASL:ROL $AA:ASL:ROL $AA 1430 ASL:ROL $AA:CLC:ADC CSET:TAX 1432 LDA $AA:ADC CSET[170]1:TAY 1434 STX $A9:STY $AA 1436 [153] JMP PUTBYTS 1438 LOCH2 CMP #$0E:BNE RVCHR 1440 LCASE LDA CSET[170]1:[176]A #8:BNE PCASE 1442 RVCHR CMP #$12:BEQ PRVSE:RTS 1444 HICHR [175] #$7F:CMP #$7F:BNE [172][170]4 1446 LDA #$5E:CMP #$20:BCC HICH2 1448 [176]A #$40:BNE PRCHR 1450 HICH2 CMP #$0E:BNE OFCHR 1452 UCASE LDA CSET[170]1:[175] #$F0 1454 PCASE STA CSET[170]1:RTS 1456 OFCHR CMP #$12:BNE [172][170]7:LDA #0 1458 PRVSE STA RVSE:RTS 1460 ; 1462 CCRSR LDX LC:LDY RR:INY ;[179]CR[173]LF[177] 1464 SCRSR STX CC:STY RR ;SET CURS[176] 1466 JSR VC[185]N:STA $FA:STX $F9 1468 ASL $F9:ROL:ASL $F9:ROL:ASL $F9 1470 ROL:CLC:ADC #[177]BMAP1:STA $FA:RTS 1472 ; 1474 HCRSR LDX LC:LDY TR:JMP SCRSR 1476 ECRSR LDX CE:DEX:DEX ;EDGE RIGHT 1478 LDY RR:JMP SCRSR ;SET CURS[176] 1480 ; 1482 ;SPECIAL 8X8 CELL GRAPHICS 1484 CHK [178] [172] ;CHECKMARK 1486 .BYT %00000000 1488 .BYT %00000001 1490 .BYT %00000010 1492 .BYT %00000100 1494 .BYT %00101000 1496 .BYT %00010000 1498 .BYT %00000000 1500 .BYT %00000000 1502 COM [178] [172] ;COMMOD[176]E KEY [188]O 1504 .BYT %00111000 1506 .BYT %01000110 1508 .BYT %10110100 1510 .BYT %10111000 1512 .BYT %10110100 1514 .BYT %01000110 1516 .BYT %00111000 1518 .BYT %00000000 1520 [134] [178] [172] ;[134] BITS MASK 1522 .BYT %10101010 1524 .BYT %01010101 1526 .BYT %10101010 1528 .BYT %01010101 1530 .BYT %10101010 1532 .BYT %01010101 1534 .BYT %10101010 1536 .BYT %01010101 1538 SPC [178] [172] ;CELL W[176]K SPACE 1540 [172][178][172][170]8 ;8 BYTES 1542 ; 1544 PUTCHK [178] [172] ;PUT CHECKMARK BYTES 1546 LDX #[179]CHK:LDY #[177]CHK:BNE PUTPTRS 1548 PUTCOM [178] [172] ;PUT COM[171][188]O BYTES 1550 LDX #[179]COM:LDY #[177]COM 1552 PUTPTRS STX $A9:STY $AA 1554 PUTBYTS [178] [172] ;8 BYTES PER CELL 1556 LDA $DC0E:[175] #[171]2:STA $DC0E 1558 LDA #$31:STA $01 1560 LDY #7:LDA ($A9),Y 1562 STA SPC,Y:DEY:BPL [172][171]6 1564 LDA [134]F:BEQ CHKBITS 1566 [134]BITS LDY #7:LDA SPC,Y 1568 [175] [134],Y:STA SPC,Y 1570 DEY:BPL [172][171]10 1572 CHKBITS LDY #7:LDA ($F9),Y 1574 [176]A SPC,Y:STA ($F9),Y 1576 DEY:BPL [172][171]8 1578 LDA #$37:STA $01 1580 LDA $DC0E:[176]A #1:STA $DC0E 1582 RCRSR [178] [172] ;CURS[176] RIGHT 1584 LDX CC:INX:CPX CE:BCS [172][170]15:STX CC 1586 CLC:LDA $F9:ADC #8:STA $F9 1588 BCC [172][170]4:INC $FA:RTS 1590 LCRSR [178] [172] ;CURS[176] LEFT 1592 LDX CC:DEX:CPX LC:BCC [172][170]15:STX CC 1594 SEC:LDA $F9:SBC #8:STA $F9 1596 BCS [172][170]4:DEC $FA:RTS 1598 ; 1600 ; 1602 ;[172][172][172] MOUSE MANAGER & DRIVER [172][172][172] 1604 ; 1606 ; 1608 ;[158] MOUSE,CURS[176]$ [171][171](MAKE CURS[176]) 1610 ;[158] MOUSE,0 [171][171][171](TRANSPARENT) 1612 ;[158] MOUSE,1 [171][171](ARROW CURS[176]) 1614 ;[158] MOUSE,2 [171][171](CROSS CURS[176]) 1616 ;[158] MOUSE [145] [,COL[176]] (SHOW MOUSE) 1618 ;[158] MOUSE [OFF] [171][171][171][171](HIDE MOUSE) 1620 ; 1622 MOUSE [178] [172] ;CHECK [129] [164]KENS 1624 JSR CHR[203]T:BEQ MOUSEOFF 1626 CMP #"," :BEQ MOUSEPAR 1628 PHA:JSR MOUSECOL:PLA 1630 CMP #$91 :BEQ MOUSE[145] 1632 JMP SYNTAX ;ERR[176] 1634 MOUSEPAR JSR EATCMA ;EAT "," 1636 JSR E[197]FM ;E[197]UATE 1638 BIT $0D:BMI MOUSESTR 1640 MOUSENUM JSR FACBYT ;BYT IN .X 1642 CPX #0 :BEQ SETTRANS ;TRANSPARENT 1644 CPX #1 :BEQ SETARROW ;[174][171]ARROW 1646 CPX #2 :BEQ SETCROSS ;X[171]CROSS 1648 JMP ILLQNT 1650 SETARROW LDA #[179]ARROW:LDY #[177]ARROW 1652 LDX #39:BNE SETPNTR 1654 SETCROSS LDA #[179]CROSS:LDY #[177]CROSS 1656 LDX #15 ;[195]GTH IN .X 1658 SETPNTR STA $22:STY $23 1660 BNE SETTRANS 1662 MOUSESTR JSR [184]STR ;[161] DESCRIPT 1664 TAX ;[195]GTH IN .X 1666 SETTRANS LDY #63:LDA #0 ;CLEAR 1668 STA SLOT1,Y:DEY:BPL [172][171]4 ;OUT 1670 LDY #0:INX 1672 DEX:BEQ MOUSEPTR 1674 LDA ($22),Y:STA SLOT1,Y 1676 INY:CPY #64:BCC [172][171]11 1678 MOUSEPTR LDA #253:STA SPTR0:RTS 1680 ; 1682 MOUSEOFF [178] [172] ;HIDE MOUSE 1684 LDX #[171]2:LDA #[179]OLDIRQ:LDY #[177]OLDIRQ 1686 BNE [172][170]8 ;SKIP OVER 1688 MOUSE[145] [178] [172] ;SHOW MOUSE 1690 LDX #01:LDA #[179][162]IRQ:LDY #[177][162]IRQ 1692 SEI:STA $0314:STY $0315 1694 JSR RMSPRT0 ;INIT SPRITE0 1696 CLI:RTS 1698 ; 1700 MOUSECOL [178] [172] ;EAT [164]KEN [,COL[176]] 1702 JSR CHR[161]:BNE [172][170]3:RTS 1704 JSR [161]BYT:TXA:[175] #$0F 1706 JMP RMSCOL0 ;SPRITE0 COL[176] 1708 ; 1710 OLDIRQ [178] $EA31 ;KEYSCAN, ETC. 1712 EXTIRQ [178] $EA81 ;[142] FROM IRQ 1714 ; 1716 [162]IRQ [178] [172] ;SET UP MOUSE DRIVER 1718 LDA #[177]MSDIRQ:PHA ;[130] [145] STACK 1720 LDA #[179]MSDIRQ:PHA 1722 PHP:PHA:PHA:PHA ;CALL DUMMY [131] 1724 JMP OLDIRQ 1726 ; 1728 ; 1730 ;[172][172][172] MOUSE ROUTINES [172][172][172] 1732 ; 1734 ; 1736 MSDIRQ [178] [172] ;[162] MOUSE DRIVER IRQ 1738 JSR RDMOUSE ;[135] MOUSE (P[176]T 2) 1740 JSR RMBTNS ;[135] MOUSE BTNS 1742 STA MB:BEQ MSD2 ;NO BTNS 1744 JSR MSEVENT ;DO BTNS 1746 JMP EXTIRQ ;EXIT IRQ 1748 MSD2 LDY $028E ;CHECK COM[171]KEY 1750 CPY #2:BNE MSD3 ;[139] [168] PRESSED 1752 LDX $C6:BEQ MSD3 ;SKIP SCAN 1754 JSR MENUKEY ;MENU[155] KEYCODES 1756 MSD3 JMP EXTIRQ ;EXIT 1758 ; 1760 MSEVENT [178] [172] ;LEFT & RIGHT BTNS 1762 BMI SELECT ;LEFT BTN 1764 NOP ;(RTS [171] RIGHT BTN IGN[176]ED) 1766 BPL MENUBTN ;RIGHT BTN 1768 NOEVENT RTS 1770 ; 1772 SELECT [178] [172] ;LEFT MOUSE BUT[164]N 1774 RTS ;(NOP [171] RIGHT BTN IGN[176]ED) 1776 NOP:NOP ;FUTURE [189]ANSI[145] 1778 ; 1780 MENUBTN [178] [172] ;RIGHT MOUSE BUT[164]N 1782 JSR MENUSEL:BCS NOEVENT 1784 JSR MENUDOWN ;LAYOUT MENU ITEMS 1786 JSR MENUCTRL ;SELECT ITEM 1788 JMP MENUAWAY ;ERASE MENU ITEMS 1790 ; 1792 MCMXY [178] [172] ;MOUSE CELL COLUMN & ROW 1794 LDA MX[170]1:LSR ;XHI SET CARRY 1796 LDA MX:R[176]:LSR:LSR ;[173]8 WITH CARRY 1798 TAX:STX MCX 1800 LDA MY:LSR:LSR:LSR ;[173]8 1802 TAY:STY MCY:RTS 1804 ; 1806 ; 1808 ;[172][172][172] SPRITE0 ROUTINES [172][172][172] 1810 ; 1812 ; 1814 RDMOUSE [178] [172] ;[135] MOUSE [185]ITI[145] 1816 LDA #$C0:STA $DC02 ;CTRL P[176]T 2 1818 LDA #$80:STA $DC00 1820 LDX #0:INX:BNE [172][171]1 ;SETTLE LINES 1822 LDX $D419 ;[135] POTX 1824 LDA $DC00:PHA ;[135] P[176]T 1826 [175] #$10:STA MB ;[148] LEFT BTN 1828 TXA:BMI [172][170]5 ;RIGHT BTN 1830 LDA #$20:.BYT $2C ;[188]IC HIGH 1832 LDA #$00:[176]A MB:LSR;[188]IC LOW 1834 LSR:E[176] #[171]1:STA MB ;[148] L&R BTNS 1836 PLA:[175] #$0F ;FILTER DIRECTI[145]S 1838 LDX #$FF:STX $DC02 ;RESET DDR 1840 LDX #$7F:STX $DC00 ;RESET REG 1842 RMUP TAY:[175] #%0001:BNE RMDN 1844 LDA $D001 ;SPRITE0(Y) 1846 CMP #48:BEQ RMLF 1848 DEC $D001:BNE RMLF 1850 RMDN TYA:[175] #%0010:BNE RMLF 1852 LDA $D001 ;SPRITE0(Y) 1854 CMP #247:BEQ RMLF 1856 INC $D001 1858 RMLF TYA:[175] #%0100:BNE RMRT 1860 LDX $D000 ;SPRITE0(X) 1862 LDA $D010:[175] #1:BNE [172][170]6 1864 CPX #22:BEQ RMXY 1866 DEC $D000:CPX #0:BNE RMXY 1868 LDA $D010:[175] #$FE:STA $D010 1870 JMP RMXY 1872 RMRT TYA:[175] #%1000:BNE RMXY 1874 LDX $D000 ;SPRITE0(X) 1876 LDA $D010:[175] #1:BEQ [172][170]6 1878 CPX #85:BEQ RMXY 1880 INC $D000:BNE RMXY 1882 LDA $D010:[176]A #$01:STA $D010 1884 RMXY [178] [172] ;PUT MOUSE [185]N (MX,MY) 1886 LDA $D000:SEC:SBC #22:STA MX 1888 LDA $D010:[175] #1:SBC #0:STA MX[170]1 1890 LDA $D001:SEC:SBC #48:STA MY 1892 LDA #199:SBC MY:STA MYI:RTS 1894 ; 1896 RM[185]0Y [178] [172] ;[185]ITI[145] SPRITE0(Y) 1898 LDA TR:ASL:ASL:ASL ;WITHIN MENU 1900 ADC #52:STA $D001:RTS ;VIEWP[176]T 1902 ; 1904 RMSPRT0 [178] [172] ;INIT SPRITE0 1906 LDA $D001:CMP #48:BCS [172][170]26 1908 LDA #75:STA $D000:STA $D001 1910 LDA #[171]2:[175] $D010:STA $D010 1912 LDA #[171]2:[175] $D01B:STA $D01B 1914 TXA:BMI [172][170]7:[176]A $D015:BNE [172][170]5 1916 [175] $D015:STA $D015:RTS 1918 ; 1920 RMSCOL0 [178] [172] ;SET SPRITE0 COL[176] 1922 STA $D027:RTS 1924 ; 1926 RMBTNS [178] [172] ;[135] MOUSE BUT[164]NS 1928 LDA #4:BIT MB:BNE RMBTN1 1930 ASL:BIT MB:BNE RMBTN2 1932 RMBTN0 LDA # 0:RTS ; NO BTN Z[178]1 1934 RMBTN1 LDA #[171]1:RTS ;LEFT BTN Z[178]0 1936 RMBTN2 LDA # 1:RTS ;RGHT BTN Z[178]0 1938 ; 1940 ; 1942 ; 1944 ARROW [178] [172] ;SPRITE [131] 1946 .BYT %00000000,%00000000,%00000000 1948 .BYT %00000000,%00000000,%00000000 1950 .BYT %00100000,%00000000,%00000000 1952 .BYT %00110000,%00000000,%00000000 1954 .BYT %00111000,%00000000,%00000000 1956 .BYT %00111100,%00000000,%00000000 1958 .BYT %00111110,%00000000,%00000000 1960 .BYT %00111111,%00000000,%00000000 1962 .BYT %00111100,%00000000,%00000000 1964 .BYT %00100110,%00000000,%00000000 1966 .BYT %00000110,%00000000,%00000000 1968 .BYT %00000011,%00000000,%00000000 1970 .BYT %00000011,%00000000,%00000000 1972 ; 1974 CROSS [178] [172] ;SPRITE [131] 1976 .BYT %10001000,%00000000,%00000000 1978 .BYT %01010000,%00000000,%00000000 1980 .BYT %00100000,%00000000,%00000000 1982 .BYT %01010000,%00000000,%00000000 1984 .BYT %10001000,%00000000,%00000000 1986 ; 1988 ; 1990 ;CODE CURRENTLY [128]S AT $8BD6 1992 ; 1994 ; 1996 ; 1998 PHASE .[139] PHASE[171][172]:PHASE ERR[176] 2000 .[128]